MuRAT Multi-Resolution (seismic) Attenuation Tomography

SCOPE: 3D total attenuation, scattering, and absorption tomography
SYSTEM: The program works on all Mac and Linux computers where it has been tried.
MATLAB Version: The code keeps the us of toolboxes to a minimum. However, there are four necessary toolboxes: Signal Processing, Curve Fitting, Image Processing and Mapping Toolboxes. The parallel computing toolbox is highly recommended for speed.
Two sample datasets (Mount St. Helens and Romania) can be downloaded at www.lucadesiena.com to test the code.
INSTRUCTIONS: The current release (3.0) works following these steps:
  1. Download the package at https://github.com/LucaDeSiena/MuRAT.
  2. Download the two sample datasets at https://www.lucadesiena.com/murat.
  3. Unzip the MSH (Mount St. Helens) and Romania datasets and put the folders in the Murat-master folder.
  4. Build your own input file (.m) - each field is described in the attached README file and in the example INPUT code. Build your Input files fom those.
  5. Run MuRAT3.m and select the name of the input file you created.
Author: L. De Siena, December 2020

INPUTS AND CHECKS

The code asks for an input file, build one from the sample files provided and select it after prompt
addpath('./Utilities_Matlab')
clear; close all; clc
% Call input file
[file,path] = uigetfile('Murat_input*.mlx');
if isequal(file,0)
disp('User selected Cancel');
else
disp(['User selected ', fullfile(path,file)]);
end
User selected /Users/lucadesiena/Documents/MATLAB/MuRAT3D/Murat_inputMSH.mlx
run(fullfile(path, file));
The Murat_checks function calculates all the computational inputs that are used in the following computations. The most important is the velocity model, which will be represented as a real or false 3D depending on user choice.
Murat = Murat_checks(Murat);
Checks and Loops
Murat.input = orderfields(Murat.input);
save Murat_checks.mat Murat

SEISMIC DATA PROCESSING AND FORWARD MODELLING

The most consuming part of the code, it includes a parallelized for loop. It builds both data vectors and inversion matrices for the inversion.
load Murat_checks.mat
tic
disp('Data Section')
Data Section
if Murat.input.parallelized == 1
Murat = Murat_dataParallelized(Murat);
else
Murat = Murat_data(Murat);
end
Starting parallel pool (parpool) using the 'local' profile ... Connected to the parallel pool (number of workers: 8).
toc
Elapsed time is 22.172524 seconds.
save Murat_forward.mat Murat

TOMOGRAPHIC INVERSIONS

This function inverts for the total attenuation, absorption, and scattering in 3D.
load Murat_forward.mat
disp('Inversion Section')
Inversion Section
Murat = Murat_inversion(Murat);
save Murat_inverse.mat Murat

CREATING PLOTS

load Murat_inverse.mat
close all
disp('Plot Section')
Plot Section
Murat = Murat_plot(Murat);
save('Murat.mat','Murat');